package com.gowants.pems.util;

import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;

import java.io.*;

@SuppressWarnings("restriction")
public class Base64DecodeMultipartFile implements MultipartFile 
{

	 private final byte[] imgContent;
	 private final String header;

	 public Base64DecodeMultipartFile(byte[] imgContent, String header) 
	 {
		 this.imgContent = imgContent;
		 this.header = header.split(";")[0];
	 }

	 @Override
	 public String getName() 
	 {
		 return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
	 }

	 @Override
	 public String getOriginalFilename() 
	 {
		 return System.currentTimeMillis() + (int)Math.random() * 10000 + "." + header.split("/")[1];
	 }

	 @Override
	 public String getContentType() 
	 {
		 return header.split(":")[1];
	 }

	 @Override
	 public boolean isEmpty() 
	 {
		 return imgContent == null || imgContent.length == 0;
	 }

	 @Override
	 public long getSize() 
	 {
		 return imgContent.length;
	 }

	 @Override
	 public byte[] getBytes() throws IOException 
	 {
		 return imgContent;
	 }

	 @Override
	 public InputStream getInputStream() throws IOException 
	 {
		 return new ByteArrayInputStream(imgContent);
	 }

	 @SuppressWarnings("resource")
	 @Override
	 public void transferTo(File dest) throws IOException, IllegalStateException 
	 {
		 new FileOutputStream(dest).write(imgContent);
	 }
	 
	 /**
	  * base64转multipartFile
	  *
	  * @param base64
	  * @return
	  */
	 public static MultipartFile base64Convert(String base64) 
	 {

		 String[] baseStrs = base64.split(",");
	
		 BASE64Decoder decoder = new BASE64Decoder();
		 byte[] b = new byte[0];
		 try
		 {
			 b = decoder.decodeBuffer(baseStrs[1]);
		 } 
		 catch (IOException e) 
		 {
			 e.printStackTrace();
		 }
		 
		 for (int i = 0; i < b.length; ++i) 
		 {
			 if (b[i] < 0)
			 {
				 b[i] += 256;
			 }
		 }
		 return new Base64DecodeMultipartFile(b, baseStrs[0]);
	 }
	
}
